from flask import render_template, session, jsonify
from aps import app

from aps.models.usuario import *
from aps.models.proyectousuariorol import *
from aps.models.proyectousuario import *

  
@app.route('/main')
def main_view():
    """
    Muestra el main
    @param request: objeto que encapsula la peticion del cliente
    """     
    return render_template('main.html')

@app.route('/')
def home_view():
    """
    Si la autenticacion es correcta le muestra la pantalla principal al usuario
    sino vuelve a mostrarle el login
    @param request: objeto que encapsula la peticion del cliente
    """ 
    if 'logged_in' in session:
        return render_template('main.html')    
    return render_template('login.html')

@app.route('/llenar_combo_proyecto', methods=['GET', 'POST']) 
def llenar_combo_proyecto():  
    """
     Llena el combo correspondiente a los proyectos que le pertenecen a ese usuario
     mediante la relacion ProyectoUsuarioRoles
     @param request: objeto que encapsula la peticion del cliente
     @return: la cantidad de proyectos de ese Usuario y la lista de proyectos con su rol respectivo que tiene el usuario
     """ 
    def cumple(s):
        if s.rol.id == 1:
            if s.proyecto.id == 1:
                return s            
        if  (s.rol.id == 2):
            if (s.proyecto.estado == u'INICIADO') or (s.proyecto.estado == u'PENDIENTE') or (s.proyecto.estado == u'NO-INICIADO'):
                return s
        if  (s.rol.id == 3):
            if (s.proyecto.estado == u'INICIADO') or (s.proyecto.estado == u'PENDIENTE') or (s.proyecto.estado == u'NO-INICIADO'):
                return s
        if (s.rol.id > 2):
            if s.proyecto.estado == u'INICIADO':
                return s
                 
    userid  = session['usuario']
    usuario = bdsession.query(Usuario).filter_by(nick=userid).first()
    lista   = usuario.roles_x_proyecto            
    lista   = [ p for p in lista if cumple(p)] 
    data    = []
    for rp in lista:
        item = {}
        item['idproyecto']   = rp.proyecto.id
        item['proyecto']     = rp.proyecto.nombre
        item['estado']       = rp.proyecto.estado
        item['idrol']        = rp.rol.id
        item['rol']          = rp.rol.nombre
        item['proyecto_rol'] = '{0} ({1})'.format(rp.proyecto.nombre,rp.rol.nombre)
        data.append(item)
    return jsonify({'total':len(data), 'data':data})
    
@app.route('/consultar_usuario_login', methods=['GET', 'POST']) 
def consultar_usuario_login():
    """
    Nos permite traer los parametros de consulta(el filtro y el valor) y mostrar
    los usuarios que cumplen con la condicion del filtro.
    @param request: objeto que encapsula la peticion del cliente
    @return : si la accion se realizo correctamente
    """
    usuario = None
    userid  = session['usuario']
    usuario = bdsession.query(Usuario).filter_by(nick=userid).first()
    nombres = usuario.nombres
    apellidos = usuario.apellidos
    return jsonify({'success':True ,'nombres': nombres,'apellidos':apellidos})
    
@app.route('/consultar_informacion_usuario', methods=['GET', 'POST'])    
def consultar_informacion_usuario():
    """
    Nos permite traer los parametros de consulta(el filtro y el valor) y mostrar
    los usuarios que cumplen con la condicion del filtro.
    @param request: objeto que encapsula la peticion del cliente
    @return : si la accion se realizo correctamente
    """
    usuario = None
    userid  = session['usuario']
    usuario = bdsession.query(Usuario).filter_by(nick=userid).first()
    proyectos  = bdsession.query(ProyectoUsuario).filter_by(idusuario=usuario.id).all()
    cantproy = len(proyectos)
    proylider  = bdsession.query(ProyectoUsuarioRol).filter_by(idusuario=usuario.id,idrol=2).all()
    cantproylider = len(proylider)
    roles = bdsession.query(ProyectoUsuarioRol).filter_by(idusuario=usuario.id).all()
    cantroles = len(roles)
    return jsonify({'success':True ,'cantproy': cantproy,'cantproylider': cantproylider,'cantroles': cantroles})